<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

    <script>

        const p = new Promise(resolve => {
            console.log(1);
            setTimeout(() => {
                resolve(2)
            },100)
        })

        setTimeout(() => {
            console.log(5);   // 3
        },50)

        setTimeout(() => {
            console.log(3);   // 3
        },0)

        p.then(res => {
            console.log(res);   // 2
        })

        console.log(4);



        // 同步  1   4

        // 异步 
        //    setTime 
        //    then


        // 异步队列
        //   宏任务   定时器  ajax
        //   微任务   then  MutationObserver



        // setTimeout(0)   setTimeout(0)   setTimeout(0)

        //所有的异步任务都会在主线程上顺序执行
        //   [1]  [2]  [3]  【4】

        //   出现了加急的任务？？？？

        //   [1]  [2]  [3]  【4】 
        //     【4】                【5】


        // 同步执行完毕
        // 看是否有微任务需要执行




        // script本身就是一个宏任务

        //   同步

        //   看是否有需要立即执行的微任务

        //   执行宏任务

        //   看是否有需要立即执行的微任务



        //  最先执行的是宏任务

    </script>
    
</body>
</html>